
module RF(
    input clk,
    input rst_n,
    input [4:0] rR1,
    input [4:0] rR2,
    input [4:0] wR,
    input [31:0] wD,
    input rf_we,
    output [31:0] rD1,
    output [31:0] rD2
    );

    reg [31:0] rf[31:0];

    // loop parameter
    integer i;
    parameter i_end = 31;

    assign rD1 = (rR1 == 5'b0) ? 32'b0 : rf[rR1];
    assign rD2 = (rR2 == 5'b0) ? 32'b0 : rf[rR2];

    // wirte back logic
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n)         for(i=0;i<=i_end;i=i+1)  rf[i] <= 32'b0; 
        else if (rf_we)                              rf[wR] <=   wD;
        else                                         rf[0] <= 32'b0;
    end

endmodule
